

function generateParenthesis(n: number): String[] {
    const result: String[] = []
    const _generate = (left: number, right: number, max: number, s: string): void => {
        // terminator 终结条件
        if (left === max && right === max) {
            result.push(s)
            return
        }

        // process 业务处理
        // 当前这一层加左括号或则右括号
        // 判断括号是否合法
        // 左括号 添加之前，数量不超标（不大于n）。
        // 右括号 添加之前，左括号的个数大于右括号个数
        // drill down 进入下一层
        // level +1 ； max不变， 
        if (left < max) {
            _generate(left + 1, right, max, s + '(');
        }
        if (left > right) {
            _generate(left, right + 1, max, s + ')');
        }
        // reverse state 清除当前层造成的状态
    }
    _generate(0, 0, n, '');
    return result;
};



function generateParenthesis1(n: number): string[] {
    const result: string[] = []
    // 生成一个括号字符串
    const recursion = (left: number, right: number, max: number, s: string = '') => {
        // 1.退出条件
        if (left === max && right === max) {
            result.push(s)
            return
        }
        // 2.逻辑处理，3. 进入下一层
        if (left < max) {
            recursion(left + 1, right, max, s + '(');
        }
        if (left > right) {
            recursion(left, right + 1, max, s + ")")
        }
        // 4. 清除环境
    }
    recursion(0, 0, n, '')
    return result
};





























console.log(generateParenthesis(3))